在先前的文章已經介紹了如何創建 Documents、Index 等方法,今天要介紹如何將結果儲存起來,這樣就不需要每次都重新訓練了。 LlamaIndex Storing 功能允許開發者將索引及其相關數據儲存在不同的後端,例如本地檔案系統、資料庫或雲端存儲中。這項功能不僅提供了便捷的數據持久化方案,還能確保數據的完整性和快速檢索的性能。
Storing 功能主要解決的問題如下:
資料持久化:在應用程式關閉或重啟後仍保留索引,無需重新生成。
資源節省:減少系統每次需要重新建立索引的運算成本,節省系統資源。
便捷存取:提供簡易的方法讓應用程式能隨時載入並使用之前保存的索引。
Vector Stores🧮:
Vector Stores 是一種用於儲存嵌入向量的資料結構。這些存儲庫不僅可以保存向量,還可以選擇性地保存原始文檔片段或元數據,便於後續檢索和分析。
LlamaIndex 支援超過 20 種不同的向量儲存選項,並不斷增加更多的集成和功能。以下是一些常見的儲存庫:
每個向量儲存選項都具有不同的功能,如異步操作、刪除操作及文檔儲存等,以滿足多樣化的應用需求,以下將示範 ChromaDB + LlamaIndex:
pip install chromadb
pip install llama-index-vector-stores-chroma
可能會遇到C++ Error error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
,下載並安裝 Microsoft C++ Build Tools 並安裝 build-tools 即可解決。
執行程式碼:
import os
os.environ["OPENAI_API_KEY"] = "YOUR-API-KEY"
import chromadb
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.core import Document, VectorStoreIndex, StorageContext
# Create documents
...
# Connect to Chroma
chroma_client = chromadb.EphemeralClient()
chroma_collection = chroma_client.get_or_create_collection("quickstart")
# Set LlamaIndex
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
# Embedding + Storing
index = VectorStoreIndex.from_documents(
documents, storage_context=storage_context
)
# View ChromaDB content
print(chroma_collection.get())
Document Stores📄:
Document Stores 是用於儲存已處理文檔塊(Chunk)的資料結構,這些片段被稱為 Node 物件。這些存儲系統允許用戶將文檔數據持久化,並提供多種後端選擇以適應不同的需求。
支援的後端:
Index Stores📑:
Index Stores 是用於存儲輕量級索引、元數據的資料結構,這些元數據是建立索引過程中生成的附加狀態訊息。LlamaIndex 提供了多種索引儲存選項,以便用戶根據需求選擇合適的後端。
支援的後端:
Chat Stores💬:
Chat Stores 是一種專門用於儲存聊天歷史的資料結構,主要功能為保持訊息的順序,這對於維護整體對話至關重要。這些存儲系統能夠通過鍵(如 user_ids 或其他唯一標識符)來組織聊天消息序列,並支持 delete、insert 和 get 操作。
from llama_index.core.storage.chat_store import SimpleChatStore
from llama_index.core.memory import ChatMemoryBuffer
# Create Document
...
# Embedding or Other Indexing
...
# Create Chat Stores
chat_store = SimpleChatStore()
chat_memory = ChatMemoryBuffer.from_defaults(
token_limit=3000,
chat_store=chat_store,
chat_store_key="user1",
)
# Create Chat Object
agent = OpenAIAgent.from_tools(tools, memory=memory)
# OR
chat_engine = index.as_chat_engine(memory=memory)
# Save/Load from Disk
chat_store.persist(persist_path="chat_store.json")
loaded_chat_store = SimpleChatStore.from_persist_path(
persist_path="chat_store.json"
)
Persisting & Loading Data💾:
Persisting & Loading Data 是 LlamaIndex 中一個重要的功能,幫助用戶有效地管理數據的持久化和加載。預設情況下,LlamaIndex 將數據儲存在內存中,用戶可以選擇將其持久化到磁碟中。
storage_context = StorageContext.from_defaults(
docstore=SimpleDocumentStore.from_persist_dir(persist_dir="<persist_dir>"),
vector_store=SimpleVectorStore.from_persist_dir(
persist_dir="<persist_dir>"
),
index_store=SimpleIndexStore.from_persist_dir(persist_dir="<persist_dir>"),
)
在本篇文章中,我們介紹了 LlamaIndex 的各種數據存儲選項,這些選項能夠有效地解決資料持久化和系統資源節省的問題。透過不同的 Vector Stores、Document Stores、Index Stores 及 Chat Stores,開發者可以根據應用需求靈活選擇合適的存儲庫,確保數據的安全性與快速檢索能力。此外,LlamaIndex 提供的 Persisting & Loading Data 功能,更進一步提升了數據的持久性與便利性。
透過 LlamaIndex 的強大儲存功能,開發者不僅能節省重複訓練的時間,還能優化系統效能,為 AI 應用程序提供穩定且高效的資料管理方案。